package com.oriental.manage.service.specially.Impl;

import com.oriental.manage.core.paging.Pagination;
import com.oriental.manage.core.response.ResponseDTO;
import com.oriental.manage.core.utils.SessionUtils;
import com.oriental.manage.dao.merchant.baseinfo.MerchantInfoMapper;
import com.oriental.manage.dao.merchant.itconfig.MerchantInterfaceMapper;
import com.oriental.manage.dao.specially.EnterpriseMchntBaseInfoMapper;
import com.oriental.manage.model.specially.EnterpriseMchntBaseInfo;
import com.oriental.manage.pojo.merchant.baseinfo.MerchantInfo;
import com.oriental.manage.pojo.merchant.itconfig.MerchantInterface;
import com.oriental.manage.pojo.specially.BatchMessage;
import com.oriental.manage.service.specially.BatchMessageService;
import com.oriental.manage.service.specially.EnterpriseMchntBaseInfoService;
import com.oriental.riskfront.api.enums.MessageStatus;
import com.oriental.riskfront.api.enums.TransCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.omg.CORBA.portable.ApplicationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * Created by jinxin on 2017/4/21.
 */
@Slf4j
@Service
public class EnterpriseMchntBaseInfoServiceImpl implements EnterpriseMchntBaseInfoService {

    @Autowired
    MerchantInfoMapper merchantInfoMapper;
    @Autowired
    MerchantInterfaceMapper merchantInterfaceMapper;
//    @Autowired
//    MerchantInfoTempMapper  merchantInfoTempMapper;

    @Autowired
    EnterpriseMchntBaseInfoMapper enterpriseMchntBaseInfoMapper;

    @Autowired
    BatchMessageService batchMessageService;

    @Override
    public void search(EnterpriseMchntBaseInfo enterpriseMchntBaseInfo, Pagination<EnterpriseMchntBaseInfo> pagination) {
        String status= enterpriseMchntBaseInfo.getStatus();
        if("01".equals(status)){
            enterpriseMchntBaseInfo.setStatus("B");
        }
        if("03".equals(status)){
            enterpriseMchntBaseInfo.setStatus("C");
        }
        List<EnterpriseMchntBaseInfo> enterpriseMchntBaseInfoList = enterpriseMchntBaseInfoMapper.pageQuery(enterpriseMchntBaseInfo);

        if (enterpriseMchntBaseInfoList != null && enterpriseMchntBaseInfoList.size() > 0) {
            pagination.setRowCount(enterpriseMchntBaseInfoList.get(0).getRowCount());
            pagination.setList(enterpriseMchntBaseInfoList);
        }
        log.info("特约商户-企业商户查询数据：" + enterpriseMchntBaseInfoList);
    }

    @Override
    public EnterpriseMchntBaseInfo initMchntBaseInfo(EnterpriseMchntBaseInfo enterpriseMchntBaseInfo) {
        enterpriseMchntBaseInfo.setPageSize(1);
        enterpriseMchntBaseInfo.setPageNum(1);
        enterpriseMchntBaseInfo.setDeleteFlag("0");
        List<EnterpriseMchntBaseInfo> enterpriseMchntBaseInfoList = enterpriseMchntBaseInfoMapper.searchEnterpriseMchntBaseInfo(enterpriseMchntBaseInfo);
        if (enterpriseMchntBaseInfoList != null && enterpriseMchntBaseInfoList.size() != 0) {
            enterpriseMchntBaseInfo = enterpriseMchntBaseInfoList.get(0);
            enterpriseMchntBaseInfo.setExist("1");
            log.info("上报表中查到数据" + enterpriseMchntBaseInfo);
        }
        log.info("商户信息回调,初始化数据，上报表中未查到，从其余表中同步");
        MerchantInterface merchantInterface = new MerchantInterface();
        merchantInterface.setMerchantCode(enterpriseMchntBaseInfo.getCusCode());
        merchantInterface.setPageSize(1);
        merchantInterface.setPageNum(1);
        List<MerchantInterface> merchantInterfaceList = merchantInterfaceMapper.queryMerchantInterface(merchantInterface);
        if (merchantInterfaceList != null && merchantInterfaceList.size() != 0) {
            enterpriseMchntBaseInfo.setServerIp(merchantInterfaceList.get(0).getMerchantIp());
        }
        MerchantInfo merchantInfo = new MerchantInfo();
        merchantInfo.setMerchantCode(enterpriseMchntBaseInfo.getCusCode());
        merchantInfo.setPageNum(1);
        merchantInfo.setPageSize(1);
        List<MerchantInfo> merchantInfoList = merchantInfoMapper.queryPage(merchantInfo);
        merchantInfo = merchantInfoList.get(0);
        if(StringUtils.isNotBlank(merchantInfo.getMerchantName())){
            enterpriseMchntBaseInfo.setRegName(merchantInfo.getMerchantName());
        }if(StringUtils.isNotBlank(merchantInfo.getMerchantAbbrName())){
            enterpriseMchntBaseInfo.setCusName(merchantInfo.getMerchantAbbrName());
        }if(StringUtils.isNotBlank(merchantInfo.getMerchantUrl())){
            enterpriseMchntBaseInfo.setUrl(merchantInfo.getMerchantUrl());
        }if(merchantInfo.getMerchantOnlineDate()!=null){
            enterpriseMchntBaseInfo.setStartTime(merchantInfo.getMerchantOnlineDate());
        }if(merchantInfo.getRevokeDate()!=null){
            enterpriseMchntBaseInfo.setEndTime(merchantInfo.getRevokeDate());
        }
        if ("B".equals(merchantInfo.getMerchantStatus())) {
            enterpriseMchntBaseInfo.setStatus("01");
        } else {
            enterpriseMchntBaseInfo.setStatus("03");
        }
//        MerchantInfoTemp merchantInfoTemp = new MerchantInfoTemp();
//        merchantInfoTemp.setMchntAbbrName(merchantInfo.getMerchantAbbrName());
//        merchantInfoTemp.setPageNum(1);
//        merchantInfoTemp.setPageSize(1);
//        List<MerchantInfoTemp> merchantInfoTempList=merchantInfoTempMapper.searchMchntTemp(merchantInfoTemp);
//        if(merchantInfoTempList!=null&&merchantInfoTempList.size()!=0){
//            merchantInfoTemp=merchantInfoTempList.get(0);
//            if(StringUtils.isNotBlank(merchantInfoTemp.getBizLicenseCode())){
//                enterpriseMchntBaseInfo.setDocType("01");
//                enterpriseMchntBaseInfo.setDocCode(merchantInfoTemp.getBizLicenseCode());
//            }
//            if(StringUtils.isNotBlank(merchantInfoTemp.getLegalRepresentative())){
//                enterpriseMchntBaseInfo.setLegDocType("01");
//                enterpriseMchntBaseInfo.setLegDocCode(merchantInfoTemp.getIdNo());
//            }
//            enterpriseMchntBaseInfo.setLegDocName(merchantInfoTemp.getLegalRepresentative());
//            enterpriseMchntBaseInfo.setInduType(merchantInfoTemp.getMccCode());
//            enterpriseMchntBaseInfo.setBankNo(merchantInfoTemp.getCnapsCode());
//            enterpriseMchntBaseInfo.setOpenBank(merchantInfoTemp.getBankName());
//            enterpriseMchntBaseInfo.setContName(merchantInfoTemp.getMainName());
//            enterpriseMchntBaseInfo.setContPhone(merchantInfoTemp.getMainMobile());
//            enterpriseMchntBaseInfo.setCusEmail(merchantInfoTemp.getMainEmail());
//        }
        if(org.apache.commons.lang3.StringUtils.isBlank(enterpriseMchntBaseInfo.getNote())){
            enterpriseMchntBaseInfo.setNote("0");
        }
//        enterpriseMchntBaseInfo.setCusType("02");
        enterpriseMchntBaseInfo.setUploadStatus(MessageStatus.INIT.getCode());
        return enterpriseMchntBaseInfo;
    }

    @Override
    public void insertEnterpriseMchntBaseInfo(EnterpriseMchntBaseInfo enterpriseMchntBaseInfo, ResponseDTO<String> responseDTO) throws ApplicationException {
        //对审核状态的核查
        enterpriseMchntBaseInfo.setOrgId("Z2012931000018");
        EnterpriseMchntBaseInfo enterpriseMchntBaseInfo1 = new EnterpriseMchntBaseInfo();
        enterpriseMchntBaseInfo1.setCusCode(enterpriseMchntBaseInfo.getCusCode());
        enterpriseMchntBaseInfo1.setDeleteFlag("0");
        List<EnterpriseMchntBaseInfo> enterpriseMchntBaseInfoList = enterpriseMchntBaseInfoMapper.searchEnterpriseMchntBaseInfo(enterpriseMchntBaseInfo1);
        int centerStatus = 0;
        if (enterpriseMchntBaseInfoList != null && enterpriseMchntBaseInfoList.size() != 0) {
            String uploadStatus = enterpriseMchntBaseInfoList.get(0).getUploadStatus();
            if (!"00".equals(enterpriseMchntBaseInfoList.get(0).getCenterStatus())) {
                centerStatus = 1;
            }
            if (MessageStatus.PASS.getCode().equals(uploadStatus) || MessageStatus.SUB_INIT.getCode().equals(uploadStatus)) {
                responseDTO.setSuccess(false);
                responseDTO.setMsg("该商户的上报信息正在处理中，");
                return;
            }
            if (MessageStatus.INIT.getCode().equals(uploadStatus)) {
                enterpriseMchntBaseInfo.setRepPerson(SessionUtils.getUserName());
                enterpriseMchntBaseInfo.setRepDate(new Date());
                enterpriseMchntBaseInfoMapper.updateEnterpriseMchntBaseInfo(enterpriseMchntBaseInfo);
                responseDTO.setSuccess(true);
                return;
            } else {
                enterpriseMchntBaseInfoMapper.deleteEnterpriseMchntBaseInfo(enterpriseMchntBaseInfo);
            }
        }
        String note = enterpriseMchntBaseInfo.getNote();
        enterpriseMchntBaseInfo.setNote(String.valueOf(Integer.valueOf(note) + 1));
        enterpriseMchntBaseInfo.setRepPerson(SessionUtils.getUserName());
        enterpriseMchntBaseInfo.setRepType("03");
        enterpriseMchntBaseInfo.setUploadStatus(MessageStatus.INIT.getCode());
        enterpriseMchntBaseInfo.setRepDate(new Date());
        enterpriseMchntBaseInfo.setUploadDate(new Date());
        enterpriseMchntBaseInfo.setId(UUID.randomUUID().toString().replace("-", ""));
        if (centerStatus == 0) {
            enterpriseMchntBaseInfo.setCenterStatus("00");
        }

        com.oriental.manage.core.utils.BeanUtils beanUtils = new com.oriental.manage.core.utils.BeanUtils();
        beanUtils.nullConverNullString(enterpriseMchntBaseInfo);
        int info = enterpriseMchntBaseInfoMapper.addEnterpriseMchntBaseInfo(enterpriseMchntBaseInfo);
        if (info > 0) {
            BatchMessage batchMessage = new BatchMessage();
            batchMessage.setId(UUID.randomUUID().toString().replace("-", ""));
            batchMessage.setSubmitMsgId(enterpriseMchntBaseInfo.getId());
            batchMessage.setStatus(MessageStatus.INIT.getCode());
            batchMessage.setDeleteFlag("0");
            batchMessage.setCount(1);
            batchMessage.setTrnxCode(TransCode.EER001.getCode());
            batchMessage.setReportDate(new Date());
            batchMessage.setCreateBy(SessionUtils.getUserName());
            batchMessage.setMerchant(enterpriseMchntBaseInfo.getCusCode());
            log.info("生成批次成功" + batchMessage);
            batchMessageService.insertBatchMessage(batchMessage);
            responseDTO.setSuccess(true);
        }
    }

    @Override
    public List<EnterpriseMchntBaseInfo> searchForCusCode(EnterpriseMchntBaseInfo enterpriseMchntBaseInfo) {
        List<EnterpriseMchntBaseInfo> enterpriseMchntBaseInfoList = enterpriseMchntBaseInfoMapper.searchEnterpriseMchntBaseInfo(enterpriseMchntBaseInfo);

        return enterpriseMchntBaseInfoList;
    }
}
